package com.hkfrich.common.controller;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hkfrich.common.constant.Constants;
import com.hkfrich.common.utils.StringUtils;

import java.lang.reflect.Field;

/**
 * @ClassName BaseController
 * @Desscription 公共方法controller
 * @Author _HeiShuai
 * @Date 2022/8/29 23:46
 * @Version 1.0
 **/
public class BaseController {

    /**
     * @return
     * @Author _HeiShuai
     * @Description // 处理 对象自身 参数 和 时间参数
     * @Date 20:27 2022/8/30
     * @Param
     **/
    public static <T> QueryWrapper<T> initBaseQueryWrapper(T t) {
        QueryWrapper<T> query = Wrappers.query(t);
        try {
            Field fieldBeginTime = t.getClass().getSuperclass().getDeclaredField(Constants.BEGINTIME);
            Field fieldEndTime = t.getClass().getSuperclass().getDeclaredField(Constants.ENDTIME);
            fieldBeginTime.setAccessible(true);
            fieldEndTime.setAccessible(true);
            String beginTime = getNotNullStr(fieldBeginTime.get(t) + "");
            String endTime = getNotNullStr(fieldEndTime.get(t) + "");
            if (StringUtils.isNotBlank(beginTime)) query.ge(Constants.CREATE_TIME, beginTime);
            if (StringUtils.isNotBlank(endTime)) query.le(Constants.CREATE_TIME, endTime);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return query;
    }

    /**
     * @return
     * @Author _HeiShuai
     * @Description //反射获取类的通用字段初始化查询分页条件
     * @Date 20:27 2022/8/30
     * @Param
     **/
    public static <T> Page<T> initBaseQueryPageWrapper(T t) {
        Page<T> page = null;
        try {
            Field fieldPageNum = t.getClass().getSuperclass().getDeclaredField(Constants.PAGENUM);
            Field fieldPageSize = t.getClass().getSuperclass().getDeclaredField(Constants.PAGESIZE);
            fieldPageNum.setAccessible(true);
            fieldPageSize.setAccessible(true);
            int pageNum = Integer.parseInt(getNotNullStr(fieldPageNum.get(t) + ""));
            int pageSize = Integer.parseInt(getNotNullStr(fieldPageSize.get(t) + ""));
            if (pageNum !=0 && pageSize != 0) {
                page = new Page<T>(pageNum, pageSize);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return page;
    }


    /**
     * @return
     * @Author _HeiShuai
     * @Description //body中的数据转为JSONObject 方便调用
     * @Date 20:26 2022/8/30
     * @Param
     **/
    public static JSONObject getBodyParamsByStr(String paramsStr) {
        try {
            if (StringUtils.isNotEmpty(paramsStr)) {
                return JSONObject.parseObject(paramsStr);
            }
            return null;
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * @return
     * @Author _HeiShuai
     * @Description //获取非空字符串
     * @Date 21:07 2022/8/30
     * @Param
     **/
    public static String getNotNullStr(String paramsStr) {
        if ("null".equals(paramsStr)) {
            return paramsStr.replaceAll("null", "");
        } else {
            return paramsStr;
        }
    }
}
